#include <bits/stdc++.h>
using namespace std;
const int N=6050;
vector<int> g[N];
int a[N];
int n,u,v;
int dp[N][2];
int ind[N];
void dfs(int u){
    int siz=g[u].size();
    dp[u][0]=0;
    dp[u][1]=a[u];
    if(siz==0){
        return;
    }
    for(int i=0;i<siz;i++){
        int v=g[u][i];
        dfs(v);
        dp[u][1]+=dp[v][0];
        dp[u][0]+=max(dp[v][0],dp[v][1]);
    }
}
int main(void){
    while(~scanf("%d",&n)){
        for(int i=0;i<N;i++){
            g[i].clear();
        }
        memset(a,0,sizeof(a));
        memset(ind,0,sizeof(ind));
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        while(scanf("%d%d",&v,&u) && u!=0 && v!=0){
            g[u].push_back(v);
            ind[v]++;
        }
        int rt=0;
        for(int i=1;i<=n;i++){
            if(ind[i]==0){
                rt=i;
                break;
            }
        }
        dfs(rt);
        int ans=0;
        for(int i=1;i<=n;i++){
            //printf("%d %d\n",dp[i][0],dp[i][1]);
            ans=max(ans,max(dp[i][0],dp[i][1]));
        }
        printf("%d\n",ans);
    }
    return 0;
}